/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package docmanager.operation.sectores;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import bf.DataAccess;
import bf.operation.Operation;
import bf.operation.OperationException;
import bf.utils.Util;
import docmanager.db.ConnectionPool;

/**
 *
 * @author Jose Luis
 */
public class OpEliminarSectores extends Operation
{
    String returnURL = "DMController?op=ListarSectores";
    
    public Map execute(HttpServletRequest request) throws OperationException
    {
    	Map m = new HashMap();
    	String[] strIds = request.getParameterValues("id");
    	if (strIds == null || strIds.length == 0)
    	{
    		m.put("mensaje", "<h2>No se ha marcado sector</h2>");
    		return m;
    	}
        int[] ids = Util.toIntArray(strIds);
        
        Connection conn = null;
        try
        {
            conn = ConnectionPool.getConnection();
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();
        }
        try
        {
        	conn.setAutoCommit(false);
        	
        	
        	//Borramos los documentos que SOLO estan en este sector y desasociamos a los documentos que estan asociados con sector
        	for (int i =0; i< ids.length; i++) {
        		int idSector = ids[i];
        		//Buscamos todas las entradas en la tabla que correspondan a ese sector        		
        		Statement sDocumentosDelSector = conn.createStatement ();
                ResultSet rsDocumentosDelSector = sDocumentosDelSector.executeQuery("SELECT * FROM documentos_sectores where id_sector = " + idSector);
        		
                //Primero chequeamos que el sector tenga documentos asociados
                while (rsDocumentosDelSector.next()) {
                	
                	//Ahora buscamos todas las entradas que pertenecen a algun sector que no sea el que se esta por borrar
                	int idDocumento = rsDocumentosDelSector.getInt("id_documento");
                	Statement s1 = conn.createStatement ();
                    ResultSet rs1 = s1.executeQuery("SELECT * FROM documentos_sectores where id_documento = " + idDocumento + " AND id_sector != " + idSector);
                    
                    //si no tienen ningun otro sector asociado, se borra el documento. Si no, no.
                    if (!rs1.next()) {
                    	Statement s2 = conn.createStatement ();
                    	s2.executeUpdate("DELETE FROM documentos where id = " + idDocumento);
                    }
                    
                    //Se borra la asociacion del documento con el sector a borrar.
                    s1.executeUpdate("DELETE FROM documentos_sectores where id_sector = " + idSector + " AND id_documento = " + idDocumento);
                    
                }
        	}
        	
        	//Borramos el sector
            for (int i =0; i< ids.length; i++)
            {
                int id = ids[i];
                String query = "DELETE FROM sectores where id=" + id;
                DataAccess.dmlQueryStatic(conn, query);
            }
            
            
            conn.commit();
            conn.setAutoCommit(true);
            ConnectionPool.closeConn(conn);
        } catch (SQLException sQLException)
        {
            sQLException.printStackTrace();
            throw new OperationException();            
        }
        m.put("mensaje", "<h2>Sectores eliminados con exito</h2>");
        return m;
        
    }

    
    public String getReturnURL()
    {
       return returnURL; 
    }
    
}
